package dataMining.VertialTopK2;

import java.io.IOException;
import java.util.Date;

/**
 * @author: cuiH
 * Date: 13-7-8
 * 也不用垂直，直接用倒置表，但是应用boolean倒置表进行运算。因为垂直的竖排扫描定位可能慢于水平
 * 数据结构：
 * boolean事务表 + top_k链表
 * boolean表中完全对照，所以0-行和0-列不进行事务的存储 （也就是说item是1就放在1的位置，然后事务是多少就放在多少的位置）
 * 第二版：要点，增加对item内部的排序，避免重复，
 *
 */
public class MyAlgorithm {
    public static int K = 501;                          //top_K中K的声明 ,此种情况k必须大于itemNumber，防止第一遍赋值出现意外错误
    public static int tranNumber = 8125;                  //定义总的transaction个数 （事务树+1）
    public static int itemNumber = 120;                 //定义总的item个数
    public static boolean[][] DATA = new boolean[K + 1][tranNumber];  // 全局数据集的描述,其中第一个参数是数据集的item数

    public static String inputFile = "C:/Users/freedom/IdeaProjects/dataMining/src/mushroom1.dat";
    public static String outputFile = "C:/Users/freedom/IdeaProjects/dataMining/src/剪枝版TOP"+(K-1)+"项集输出.txt";

    public static void main(String[] args) throws IOException {
        long costTime;                             //读取耗费时间的参数
        Date startDate = new Date();                 //开始时间

        /*
        * 初始化数据结构
        * 对Boolean表，直接定义为全部初始化为false
        * 对于链表，则调用为空
        * */
        for (int i = 0; i < K + 1; i++) {
            for (int j = 0; j < tranNumber ; j++) {
                DATA[i][j] = false;
            }
        }

        TopK topK = new TopK();                       //实现topK的具体类
        topK.topK();

        Date endDate = new Date();                   //结束时间
        costTime = endDate.getTime() - startDate.getTime();
        System.out.println("所消耗时间为：" + costTime + "ms");
    }
}
